package concurrency;

import java.util.concurrent.TimeUnit;

/**
 * 后台线程
 *
 * 2018年 09月 22日 星期六
 * @author fireway
 */
public class SimpleDaemons implements Runnable {
    public void run() {
        try {
            while(true) {
                TimeUnit.MILLISECONDS.sleep(100);
                System.out.println(Thread.currentThread() + " " + this
                                   + " " + Thread.currentThread().isDaemon());
            }
        } catch(InterruptedException e) {
            System.out.println("sleep() interrupted");
        }
    }

    // 一旦main()完成其工作，就没什么能阻止程序终止了
    // 因为除了后台线程之外，已经没有线程在运行了。
    public static void main(String[] args) throws Exception {
        for(int i = 0; i < 10; i++) {
            Thread daemon = new Thread(new SimpleDaemons());
            daemon.setDaemon(true);
            // 必须在线程启动之前调用setDaemon()，才能把它设置为后台线程
            daemon.start();
        }

        System.out.println("All daemons started");
        // main()线程被设定为短暂睡眠，所以可以观察到所有后台线程启动后的结果
        TimeUnit.MILLISECONDS.sleep(175);
    }
}

